﻿using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using Pms.Utils;
using Biblioteca.DataBase;
using System.Data.OracleClient;


namespace SERIX.Classes
{
    public class CLogCadastro
    {
        private string _tabela;
        private string _coluna;
        private string _primeiro_cadastro;
        private string _ultima_atualizacao;        
        private string _usuario_ini;
        private string _usuario_fim;

        public void BuscaTabela(string IdtTabela)
        {
            #region Case que retorna o nome da tabela e a coluna a ser atualizada
            switch (IdtTabela)
            {
                case "1": { _tabela = "Serix.SRX_PROPRIEDADES"; _coluna = "IDT_PROP"; break; }               
                case "2": { _tabela = "Serix.SRX_BENEFICIARIOS"; _coluna = "Idt_Benef"; break; }                
            }
            #endregion
        }

        public CLogCadastro()
        {
            //Construtor da Classe
        }
        /// <summary>
        /// Construtor da Classe CLogCadastro
        /// </summary>
        /// <param name="IdtTabela">Identificador para saber qual é a tabela que será alterada</param>
        /// <param name="linha">Linha que será alterada na tabela</param>
        /// <param name="ObterTodos">Nome do usuario para autentificar</param>
        public CLogCadastro(string IdtTabela, string linha, string login)
        {

            BuscaTabela(IdtTabela);
            string sql = @"SELECT DT_INI_CADASTRO, DT_ATUAL_CADASTRO, USUARIO_INI, USUARIO_FIM FROM " + _tabela + " WHERE " + _coluna + " = :IDT";
            Query qy = null;

            try
            {
                qy = new Query(BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSNG, login, BiblioPMS.Demo), sql);
                qy.AdicionarParametro(":IDT", DbType.String, linha);

                qy.Executar();
                this._primeiro_cadastro = qy.ObterCampo("DT_INI_CADASTRO");
                this._ultima_atualizacao = qy.ObterCampo("DT_ATUAL_CADASTRO");
                this._usuario_ini = qy.ObterCampo("USUARIO_INI");
                this._usuario_fim = qy.ObterCampo("USUARIO_FIM");
            }
            catch
            {
                if (qy.EstadoConexao() == ConnectionState.Open)
                {
                    qy.FecharConexao();
                }
            }

        }


        //Propriedades
        public string Log_Primeiro
        {
            get { return this._primeiro_cadastro; }
        }

        public string Log_Ultima
        {
            get { return this._ultima_atualizacao; }
        }
        public string Usuario_Ini
        {
            get { return this._usuario_ini; }
        }

        public string Usuario_fim
        {
            get { return this._usuario_fim; }
        }        


        /// <summary>
        /// Metódo para Atualizar o campo com o ultimo usuario que alterou o cadastro
        /// </summary>
        /// <param name="IdtTabela">Identificador da tabela que será alterada</param>
        /// <param name="ObterTodos">Nome de ObterTodos referente a ultima alteração no cadastro</param>
        /// <param name="linha">Linha que será altera na tabela</param>
        public CLogCadastro Alterar(string IdtTabela, string login, string linha)
        {
            BuscaTabela(IdtTabela);
            OracleConnection conexao = new OracleConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
            string SQL = "update " + _tabela + @" set 
                            DT_ATUAL_CADASTRO = :DT_ATUAL_CADASTRO,
                            USUARIO_FIM = :USUARIO_FIM
						   where " + _coluna + " = :IDT ";
            OracleCommand cmd = new OracleCommand(SQL, conexao);
            cmd.Parameters.Add("DT_ATUAL_CADASTRO", OracleType.Timestamp);
            cmd.Parameters.Add("USUARIO_FIM", OracleType.VarChar);
            cmd.Parameters.Add("IDT", OracleType.Number);
            cmd.Parameters["DT_ATUAL_CADASTRO"].Value = DateTime.Now;
            cmd.Parameters["USUARIO_FIM"].Value = login;
            cmd.Parameters["IDT"].Value = Convert.ToInt32(linha);

            try
            {
                conexao.Open();
                cmd.ExecuteNonQuery();
            }
            catch (Exception e) 
            {
             
            }
            finally { conexao.Close(); }
            CLogCadastro LOG = new CLogCadastro(IdtTabela, linha, login);
            return LOG;
        }


        /// <summary>
        /// Metódo para a inserção do log de cadastro
        /// </summary>
        /// <param name="IdtTabela">Identificação da tabela que será alterada</param>
        /// <param name="ObterTodos">Nome do usuario</param>
        /// <param name="linha">Linha que será alterada</param>
        public CLogCadastro Inserir(string IdtTabela, string login, string linha)
        {
            BuscaTabela(IdtTabela);
            OracleConnection conexao = new OracleConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
            string SQL = "update " + _tabela + @" set 
                            DT_INI_CADASTRO = :DT_INI_CADASTRO,
                            DT_ATUAL_CADASTRO = :DT_ATUAL_CADASTRO,
                            USUARIO_INI = :USUARIO_INI,
                            USUARIO_FIM = :USUARIO_FIM
						   where " + _coluna + " = :IDT ";
            OracleCommand cmd = new OracleCommand(SQL, conexao);
            cmd.Parameters.Add("DT_ATUAL_CADASTRO", OracleType.Timestamp);
            cmd.Parameters.Add("DT_INI_CADASTRO", OracleType.Timestamp);
            cmd.Parameters.Add("USUARIO_INI", OracleType.VarChar);
            cmd.Parameters.Add("USUARIO_FIM", OracleType.VarChar);
            cmd.Parameters.Add("IDT", OracleType.Number);
            cmd.Parameters["DT_ATUAL_CADASTRO"].Value = DateTime.Now;
            cmd.Parameters["DT_INI_CADASTRO"].Value = DateTime.Now;
            cmd.Parameters["USUARIO_INI"].Value = login;
            cmd.Parameters["USUARIO_FIM"].Value = login;

            cmd.Parameters["IDT"].Value = Convert.ToInt32(linha);
            
            try
            {
                conexao.Open();
                cmd.ExecuteNonQuery();  
            }
            catch (Exception e) { }
            finally { conexao.Close(); }
            CLogCadastro LOG = new CLogCadastro(IdtTabela, linha, login);
            return LOG;
        }

        public OracleDataReader RetornaDR(string tabela)
        {            
            OracleConnection c = new OracleConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
            string sql = @"select DAT_HORA, LOG from SERIX.SEG_LOG_OPERACOES WHERE TABELA = '" + tabela + "'";
            OracleCommand CMD = new OracleCommand(sql, c);
            c.Open();
            OracleDataReader read = CMD.ExecuteReader(); 
            return read;
            c.Close();
          
            
        }

        public string RetornaXml(OracleDataReader read)
        {
            string xml = "";
            OracleConnection c = new OracleConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
            try
            {
                c.Open();
                while (read.Read())
                {
                    xml += read["LOG"].ToString();
                }
            }
            catch
            {
            }
            finally { c.Close(); }

            xml = xml.Replace("<log>", "");
            xml = xml.Replace("</log>", "");
            xml = "<log>" + xml + "</log>";
            return xml;
        }
    }
}
